home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / ai / fuzzy / list < prev    next >
Text File  |  1986-10-20  |  2KB  |  60 lines

  1. {
  2.                     List Utility Functions
  3.                                                                 }
  4.  
  5. append( [], Str2, Str2 ).
  6. append( [Head|Tail], Str2, [Head|Result] ) :- append( Tail, Str2, Result ).
  7.  
  8. member( Element, [Element|_] ).
  9. member( Element, [_|Tail] ) :- member( Element, Tail ).
  10.  
  11. replace(A,B,C,D) :- var(A), !, replace(B,A,D,C).
  12. replace(A,B,C,D) :- var(C), !, replace(B,A,D,C).
  13.  
  14. replace( _, _, [], [] ).
  15. replace( Match, Substitute, [Match|In_tail], [X|Out_tail] ) :- !, X=Substitute,
  16.         replace( Match, Substitute, In_tail, Out_tail ).
  17. replace( Match, Substitute, [Head|In_tail], [Head|Out_tail] ) :-
  18.         replace( Match, Substitute, In_tail, Out_tail ).
  19.  
  20. starts( [], _ ).
  21. starts( [Head|Tail1], [Head|Tail2] ) :- starts( Tail1, Tail2).
  22.  
  23. howmany(A,B,C) :- var(A), !, howmany2(A,B,C).
  24.  
  25. howmany( _, [], 0 ).
  26. howmany( Match, [Match|Tail], Count ) :- !,
  27.         howmany( Match, Tail, Count2 ), Count is Count2 + 1 .
  28. howmany( Match, [_|Tail], Count ) :- howmany(Match, Tail, Count).
  29.  
  30. howmany2(_,[],_) :- !, fail.
  31. howmany2( Match, [Match|Rest], Count ) :- howmany(Match, [Match|Rest], Count).
  32. howmany2( Match, [First|Rest], Count ) :- extract(First, Rest, New),
  33.          howmany2(Match, New, Count).
  34.  
  35. subset([],_).
  36. subset([Match|Others],List) :- member(Match, List), remove(Match, List, New),
  37.                                subset(Others, New).
  38.  
  39. remove(_,[],[]).
  40. remove(Match, [Match|Tail], Tail) :- !.
  41. remove(Match, [Head|Tail], [Head|New]) :- remove(Match, Tail, New).
  42.  
  43. slice(Piece, Pie) :- starts(Piece, Pie).
  44. slice(Piece, [_|Not_eaten]) :- slice(Piece, Not_eaten).
  45.  
  46. nth(A,B,C) :- var(A), !, nth2(A,B,C).
  47.  
  48. nth(1,[Match|_],Match) :- !.
  49. nth(Count, [Head|Tail], Match) :- Count1 is Count-1, nth(Count1, Tail, Match).
  50.  
  51. nth2(1,[Match|_],Match) :- !.
  52. nth2(Count,[_|Tail],Match) :- nth2(Count2, Tail, Match), Count is Count2 + 1 .
  53.  
  54. undup([],[]).
  55. undup([El|Old],[El|New]) :- extract(El, Old, New2), undup(New2, New).
  56.  
  57. extract(_, [], []).
  58. extract(Match, [Match|Tail], New_list) :- extract(Match, Tail, New_list), !.
  59. extract(Match, [Head|Tail], [Head|New_list]) :- extract(Match, Tail, New_list).
  60.